<?php
/**
* Контроллер 
*
* Обрабатывает действия пользователя.
*
* @autor Polikarpov Alexander polikarpovalexander@mail.ru
* @version 1.0
*/
Class Controller 
{
    /**
    * Свойства для инициализации объектов
    *
    * @var $msg Object         Объект очереди сообщений
    * @var $view Object     Объект Вида
    * @var $model Object    Объект Модели
    * @var $config Array    Конфигурация
    */
    public $msg;
    public $view;
    public $model;
    private $config;
    
    /**
    * Конструктор 
    *
    * Создает объекты Модели, Вида и очереди сообщений
    * Передает управление модели в зависимости от значения $_POST['task']
    *
    */
    function __construct() 
    {
        include_once ('messages.php');
        include_once ('view.php');
        $this->config = parse_ini_file("config.ini");
        // Создание объектов
        $this->msg = new Messages;
        switch ($this->config['storagetype']) 
        {
            case ('mysql') :
                include_once ('modelsql.php');
                $this->model = new ModelSql($this->msg, $this->config);
                break;
            case ('pdo') :
                include_once ('modelpdo.php');
                $this->model = new ModelPDO($this->msg, $this->config);
                break;
            case ('csv') :
                include_once ('modelcsv.php');
                $this->model = new ModelCSV($this->msg, $this->config);
                break;
            default :
                include_once ('modelsql.php');
                $this->model = new ModelSql($this->msg, $this->config);
                break;
        }
        $this->view = new View($this->model, $this->msg);
        // Перенаправление на Модель в зависимости от $task
        $task = '';
        $task = $_POST['task'];
        switch ($task) 
        {
            case 'addcomment' :
                if ($this->validator('add')) 
                {
                    $this->model->add($_POST['id'], $_POST['autor'], $_POST['text']);
                    $this->msg->add('Комментарий добавлен');
                    unset($_POST["autor"]);
                    unset($_POST["text"]);
                } else 
                {
                    $this->msg->add('Комментарий не добавлен. Пожалуйста, заполните все поля.');
                }
                break;
            case 'addpost' : 
                if ($this->validator('add')) 
                {
                    $this->model->add($_POST['id'], $_POST['autor'], $_POST['text']);
                    $this->msg->add('Сообщение добавлено');
                    unset($_POST["autor"]);
                    unset($_POST["text"]);
                } else 
                {
                    $this->msg->add('Сообщение не добавлено. Пожалуйста, заполните все поля.');
                }
                break;
            case 'changepost' : 
                if ($this->validator('change')) 
                {
                    $this->model->changepost($_POST['id'], $_POST['text']);
                    $this->msg->add('Сообщение изменено');
                    unset($_POST["autor"]);
                    unset($_POST["text"]);
                } else 
                {
                    $this->msg->add('Сообщение не изменено. Пустые сообщения не допускаются.');
                }
                break;
            case 'changecomment' : 
                if ($this->validator('change')) 
                {
                    $this->model->changecomment($_POST['id'], $_POST['text']);
                    $this->msg->add('Комментарий изменен');
                    unset($_POST["autor"]);
                    unset($_POST["text"]);
                } else 
                {
                    $this->msg->add('Комментарий не изменен. Пустые комментарии не допускаются.');
                }
                break;
            case 'deletepost' : 
                $this->model->deletepost($_POST['id']);
                $this->msg->add('Сообщение удалено');
                break;
            case 'deletecomment' : 
                $this->model->deletecomment($_POST['id']);
                $this->msg->add('Комментарий удален');
                break;
            default: 
                break;
        }
    }
    /**
    * Проверка входных данных
    *
    * Метод для проверки полноты данных
    * Передает управление Виду
    
    * @return false, если одно из текстовых полей не заполнено и true, если все поля не пусты.
    */
    private function validator($task) 
    {    
        switch ($task)
        {
        case 'add' :
            if ($_POST['text'] == '' || $_POST['autor'] == '' )
                return false;
            return true;
        break;
        case 'change' :
            if ($_POST['text'] == '')
                return false;
            return true;
        break;
        default :
            if ($_POST['text'] == '' || $_POST['autor'] == '' )
                return false;
            return true;
        break;
        }
    }
    /**
    * Вывод сообщений
    *
    * Метод для отображения всех сообщений и комментариев
    * Передает управление Виду
    */
    public function display() 
    {
        $this->view->display();
    }    
}